package com.china.itapi.common.util;

import java.io.FileNotFoundException;
import java.io.IOException;
import java.util.Date;
import java.util.HashMap;
import java.util.LinkedHashMap;
import java.util.Properties;
import java.util.UUID;

import com.china.itapi.common.redis.CacheClient;
import com.china.itapi.common.redis.CacheManager;



/**
 * 字典工具表
 * @author zhijun
 */
public class DictionaryUtils {
	
	/** 渠道号 */
	public static String CHANNEL = "";
	
	/** 子渠道号 */
	public static String SUBCHANNEL = "";
	
	/** web项目的路径 */
	public static String WECHAT_WEB_PATH = "";
	
	/** 受让人证件类型 */
	public static LinkedHashMap<String, String> CREDENTIAL_TYPE = new LinkedHashMap<String, String>();
	
	/** 缓存 */
	private static CacheClient client = CacheManager.commonCache;
	static{
		Properties prop = new Properties();
		try {							   
			prop.load(Thread.currentThread().getContextClassLoader().getResourceAsStream("dictionary.properties"));
			
			CHANNEL = prop.getProperty("channel");
			SUBCHANNEL = prop.getProperty("subchannel");
			WECHAT_WEB_PATH = prop.getProperty("wechat_web_url");
			
			/** 设置受让人证件类型   start */
			// 获取证件字符串，判断是否为空
			String credentialTypeAll = prop.getProperty("credential_type");
			if(null!=credentialTypeAll && !"".equals(credentialTypeAll)){
				// 如果证件字符串不为空就按照;分割，判断分割后的证件类型是否为空并且长度大于0
				String[] credentialTypeArr = credentialTypeAll.split(";");
				if(null!=credentialTypeArr && credentialTypeArr.length>0){
					// 如果证件类型不为空并且长度大于0，则遍历证件类型，判断证件类型的名称是否为空
					for(String credentialTypeStr : credentialTypeArr){
						if(null!=credentialTypeStr && !"".equals(credentialTypeStr)){
							// 如果证件类型名称不为空，则将中英文对应的名称按照,分割出来
							String[] credentialType = credentialTypeStr.split(",");
							if(null!=credentialType && credentialType.length>=2){
								// 如果分割出来的名称正好是两个，则将他们添加到全局变量里面去
								CREDENTIAL_TYPE.put(credentialType[0], credentialType[1]);
							}
						}
					}
				}
			}
			/** 设置受让人证件类型   end */
		} catch (FileNotFoundException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		}
	}
	
	/**
	  * <p>(适用条件[可选])
	  * <p>(执行流程[可选])
	  * <p>(使用方法[可选])
	  * <p>(注意事项[可选])
	  *
	  * @Description: 获取交易流水号
	  * @param openId 微信号
	  * @return 微信号+当前时间戳+一个1000以内的随机数
	  * @Created:zhouzj 2013-11-21下午3:30:41
	  * @Modified:
	 */
	public static String getTradeId(String openId){
		return openId + new Date().getTime() + (int)(Math.random()* 1000) + "";
	}
	
	
	/**
	  * <p>(适用条件[可选])
	  * <p>(执行流程[可选])
	  * <p>(使用方法[可选])
	  * <p>(注意事项[可选])
	  *
	  * @Description: 生成微信处理器返回给客户端的链接 
	  * @param url
	  * @param openId
	  * @return
	  * @Created:zhouzj 2013-12-5下午5:01:24
	  * @Modified:
	 */
	public static String generatorUrl(String url, String openId){
		
		String id = UUID.randomUUID().toString();
		
		if(null!=url && !"".equals(url)){
			if(url.indexOf("?")>0){
				url+="&__="+id;
			}else{
				url+="?__="+id;
			}
		}
		
		client.setex(id, 60*30, openId);
		
		return url;
	}
}
